<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+


/*!
 * @page SettingPagePage Исходный код класса SettingPage
 * @include setting_page.class.php
 */

/*! @addtogroup ClassWebFormsQA Основные классы проекта
 *  Группа включает основные классы используемые в проекте WebFormsQA
 *  @{
 */

/** 
 * @class SettingPage
 * @brief страница редактирования пользовательской информации \n
 * @ref SettingPagePage
 */
class SettingPage extends Page {

    /**
     * конструктор.
     * @param object &$smarty_obj   - ссылка на обьект шаблона
     * @param array  $attr          - массив атрибутов в формате attr["name"] = name_type;
     * @param string $name_template - название шаблона
     */
    function SettingPage(&$smarty_obj, $attr, $name_template)
    {
        parent::Page(&$smarty_obj, $attr, $name_template);
    }

    /** обновить данные страницы
	 *       (состояния страницы)
     * - 0 - начальное состояние
     * - 1 - пользователь идентифицирован
     * - 2 - пользователь нажимает кнопку "Изменить настройки"
     * - 3 - текущий пароль неправильный
     * - 4 - новый пароль пустой
     * - 5 - неправильно задано подтверждение пароля
     * - 6 - настройки введены, но при записи в базу возникла ошибка
     * - 7 - настройки успешно обновлены
     * - 8 - административный логин указан не правильно
     * - 9 - административный пароль указан не правильно
     *
     * @return bool результат операции
     */
    function update()
    {
    	 
        // обновляем атрибуты страницы и их значения
        // и главный шаблон Smarty
        if( $flag_result = parent::update() ) {

            $state = 0;
            $base = &$GLOBALS["base"];

            $id   = 0;
			$user = "";
			$email = "";
			$flag_admin = false;
			$reg_userinfo = array();

			if( AuthCommon::getInfoAuthUser($id, $user, $flag_admin, $email ) ) {
				$state = 1;

	
				if( $this->attr['push_choice_setting']['set'] ) {
					$state = 2;
				}
				
				if( $this->attr['second_old']['set'] ) {
					$str_password = $this->attr['second_old']['value'];
					if( $this->attr['second_old']['value'] == "" ) {
						$state = 3;
					} else if( !$base->checkPassUser($str_password) ) {
						$state = 3;						
					}
					
					
					$second = "";
					if( $this->attr['email']['set'] ) $email = $this->attr['email']['value'];
					
					if( $state != 3 ) {
						if( $this->attr['second']['set'] ) {
							$state = 6;
							if( $this->attr['second']['value'] == "" ) {
								$state = 4;
							} else {
								$state = 5;
								$second = $this->attr['second']['value'];
								if( $this->attr['second_repeat']['set'] ) {
									if( $this->attr['second']['value'] == 
									    $this->attr['second_repeat']['value'] ) {
									    $state = 6;
									    
									}
								}
							}
						}		
						
						if( $state == 6 && $this->attr['admin_first']['set'] && $this->attr['admin_second']['set'] ) {
							if( $this->attr['admin_first']['value'] != "" && $this->attr['admin_second']['value'] != "" ) {
								// указан административный пароль
								$code = AuthCommon::checkAuthAdmin($this->attr['admin_first']['value'], $this->attr['admin_second']['value']);
								if( $code == 0 ) $flag_admin = true;
								else if( $code == 1 ) $state = 8;
								else if( $code == 2 ) $state = 9;
							}
						}	

						if( $state == 6 ) {
    						// login VARCHAR(32), pass VARCHAR(32), email VARCHAR(32),  admin BOOL    
    						$data = array( "pass" => md5($second), "email" => $email, "admin" => $flag_admin );
    						if( $base->setDataInTable( USERS_TABLE, $id, $data ) ) {
								$tmp1 = $tmp2 = "";
								// обновляю данные авторизации
								AuthCommon::getInfoAuthUser($id, $user, $tmp1, $tmp2);
								AuthCommon::addAuthSessionInfo($id, $user, $flag_admin, $email );
    							$state = 7;
    						}
						}
					
					}
					
				}
				


				if( $flag_admin ) $str_admin = STATEMENT_YES;
				else $str_admin = STATEMENT_NO;

				// обратная связь для заполнения полей
				$reg_userinfo = array($user, $email, "", $str_admin);

			}


            $this->Smarty->assign("reg_userinfo", $reg_userinfo);
            $this->Smarty->assign('current_tabs', ID_PAGE_SETTING);
            $this->Smarty->assign("state", $state);
			$this->Smarty->assign("flag_admin", $flag_admin);
            
        }
        
        return $flag_result;
    } // end update()



}  // finish class SettingPage

/*! @} */

?>
